DNA//evolutions
JOpt.TourOptimizer · Feature Spotlight

Manufacturing Planning.
The optimizer decides
what to produce.

Production quantities are planning variables, not input data.

Traditional route optimizers require fixed supply quantities before optimization begins. How many items each factory produces, which facility serves which customer, how to balance load across the fleet: these decisions must be made upfront, separately, by a human planner. The optimizer only handles the routing.

JOpt.TourOptimizer eliminates this separation. Through its FlexLoad system, the optimizer dynamically determines production quantities, facility assignments, and delivery splits as part of the routing solution. Production planning and route optimization become a single, jointly optimal decision.

To our best knowledge, no other route optimization engine offers this capability as a built-in feature.

Dynamic
Production quantities optimized
Integrated
Production + routing in one solve
Unique
Not available in other VRP engines
Two separate decisions that
should be one.

In many supply chains, production and delivery are tightly coupled. A bakery does not want to produce bread that nobody ordered. A pizza chain needs to decide which branch prepares which order. A pharmaceutical distributor must balance production across facilities while meeting delivery windows. When production planning and route optimization are done separately, neither has the full picture. The production planner decides quantities without knowing the routing costs. The route optimizer plans deliveries without flexibility on supply. The result is a plan that is separately acceptable but jointly suboptimal.

This problem gets worse as scenarios become more dynamic: changing demands, multiple production sites, heterogeneous fleets, time windows, capacity limits, multi-day planning. The more constraints interact, the more value is lost by separating the decisions.

JOpt solves both as a single problem. The optimizer decides how much each facility produces, which vehicle loads what, and in which order deliveries happen. All at once.

“The optimized amount of goods of each SupplyFlexLoad describes the optimal number of items each production site has to prepare. In this case, the optimizer has done the production planning.”

JOpt.TourOptimizer Documentation
FlexLoads: the optimizer controls
production quantities.

A SupplyFlexLoad is a node that can produce goods. Unlike a fixed load, the optimizer decides the quantity. The user defines what can be produced and where. The optimizer decides how much, and distributes it across the network to minimize total cost.

Consider a bakery company with two production sites: Bakery Aachen and Bakery Cologne. Several supermarkets need bread deliveries, each with a defined demand. Each bakery has one truck with limited capacity. The company does not want to overproduce (waste) or underproduce (unserved demand).

Instead of deciding production quantities manually, two SupplyFlexLoad nodes are added, one per bakery. The optimizer determines how many bread trays each bakery produces based on total demand, truck capacity, route distances, and time windows. The result: Bakery Aachen produces 10 trays, Bakery Cologne produces 17. The optimizer made the production decision.

Why other engines cannot do this

In standard VRP solvers, supply quantities are input data fixed before optimization. There is no mechanism for the solver to create or adjust goods during the search. To our best knowledge, neither Google OR-Tools nor OptaPlanner/Timefold provide built-in support for dynamic supply decisions within the routing model. Achieving this would require custom modeling outside the solver, losing the joint optimization benefit.

Highly dynamic scenarios

JOpt supports combinations of fixed deliveries (SimpleLoad), dynamic production (SupplyFlexLoad), flexible demand (RequestFlexLoad), warehouse buffers that switch between supply and request (MixedFlexLoad), and time-critical production with delivery SLAs (TimedSupplyFlexLoad). These can all coexist in a single optimization, enabling scenarios of a complexity that static-quantity solvers cannot address.

The key difference

In JOpt, production quantities are planning variables that the optimizer controls. In other engines, they are input data that must be fixed before optimization starts. This difference determines which questions a solver can even answer.

Standard VRP enginesJOpt with FlexLoads
× Supply quantities fixed before solving Supply quantities optimized during solving
× Production planning done separately Production and routing solved jointly
× No dynamic goods creation Optimizer creates goods at supply nodes
× Split delivery requires manual modeling Built-in split delivery optimization
× Static demand per node Flexible, coupled, and timed loads

Questions only JOpt can answer

How much should each factory produce? Which production site should serve which customer? Should a large order be split across vehicles or days, and in what ratio? What is the jointly optimal production and delivery plan?

Why it works

JOpt uses dedicated PND operators in its genetic algorithm that understand goods creation, goods tracking, and load balancing. These are not generic constraint moves. They are production-aware operators that explore supply quantities, facility assignments, and split ratios as part of the search. Combined with simulated annealing and intelligent construction, the engine converges to good production plans even in large, highly dynamic instances.

See it in action.

Run PNDBakeryChainFlexLoadExample.java in a Docker sandbox. Watch the optimizer decide production quantities for two bakeries serving multiple supermarkets.

Documentation  ·  Contact  ·  GitHub